<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<TITLE>
UnicodeEscaper (Soy Complete)
</TITLE>


<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../../stylesheet.css" TITLE="Style">

<SCRIPT type="text/javascript">
function windowTitle()
{
    if (location.href.indexOf('is-external=true') == -1) {
        parent.document.title="UnicodeEscaper (Soy Complete)";
    }
}
</SCRIPT>
<NOSCRIPT>
</NOSCRIPT>

</HEAD>

<BODY BGCOLOR="white" onload="windowTitle();">
<HR>


<!-- ========= START OF TOP NAVBAR ======= -->
<A NAME="navbar_top"><!-- --></A>
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
</EM>
</TD>
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="../../../../../../com/google/template/soy/internal/base/UnescapeUtils.html" title="class in com.google.template.soy.internal.base"><B>PREV CLASS</B></A>&nbsp;
&nbsp;NEXT CLASS</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="../../../../../../index.html?com/google/template/soy/internal/base/UnicodeEscaper.html" target="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="UnicodeEscaper.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;<SCRIPT type="text/javascript">
  <!--
  if(window==top) {
    document.writeln('<A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
  <A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>


</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_top"></A>
<!-- ========= END OF TOP NAVBAR ========= -->

<HR>
<!-- ======== START OF CLASS DATA ======== -->
<H2>
<FONT SIZE="-1">
com.google.template.soy.internal.base</FONT>
<BR>
Class UnicodeEscaper</H2>
<PRE>
<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
  <IMG SRC="../../../../../../resources/inherit.gif" ALT="extended by "><B>com.google.template.soy.internal.base.UnicodeEscaper</B>
</PRE>
<DL>
<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../../../../com/google/template/soy/internal/base/Escaper.html" title="interface in com.google.template.soy.internal.base">Escaper</A></DD>
</DL>
<DL>
<DT><B>Direct Known Subclasses:</B> <DD><A HREF="../../../../../../com/google/template/soy/internal/base/PercentEscaper.html" title="class in com.google.template.soy.internal.base">PercentEscaper</A></DD>
</DL>
<HR>
<DL>
<DT><PRE>public abstract class <B>UnicodeEscaper</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A><DT>implements <A HREF="../../../../../../com/google/template/soy/internal/base/Escaper.html" title="interface in com.google.template.soy.internal.base">Escaper</A></DL>
</PRE>

<P>
An <A HREF="../../../../../../com/google/template/soy/internal/base/Escaper.html" title="interface in com.google.template.soy.internal.base"><CODE>Escaper</CODE></A> that converts literal text into a format safe for
 inclusion in a particular context (such as an XML document). Typically (but
 not always), the inverse process of "unescaping" the text is performed
 automatically by the relevant parser.

 <p>For example, an XML escaper would convert the literal string <code>"Foo&lt;Bar&gt;"</code> into <code>"Foo&amp;lt;Bar&amp;gt;"</code> to prevent <code>"&lt;Bar&gt;"</code> from
 being confused with an XML tag. When the resulting XML document is parsed,
 the parser API will return this text as the original literal string <code>"Foo&lt;Bar&gt;"</code>.

 <p><b>Note:</b> This class is similar to <A HREF="../../../../../../com/google/template/soy/internal/base/CharEscaper.html" title="class in com.google.template.soy.internal.base"><CODE>CharEscaper</CODE></A> but with one
 very important difference. A CharEscaper can only process Java
 <a href="http://en.wikipedia.org/wiki/UTF-16">UTF16</a> characters in
 isolation and may not cope when it encounters surrogate pairs. This class
 facilitates the correct escaping of all Unicode characters.

 <p>As there are important reasons, including potential security issues, to
 handle Unicode correctly if you are considering implementing a new escaper
 you should favor using UnicodeEscaper wherever possible.

 <p>A <code>UnicodeEscaper</code> instance is required to be stateless, and safe
 when used concurrently by multiple threads.

 <p>Several popular escapers are defined as constants in the class <A HREF="../../../../../../com/google/template/soy/internal/base/CharEscapers.html" title="class in com.google.template.soy.internal.base"><CODE>CharEscapers</CODE></A>. To create your own escapers extend this class and implement
 the <A HREF="../../../../../../com/google/template/soy/internal/base/UnicodeEscaper.html#escape(int)"><CODE>escape(int)</CODE></A> method.
<P>

<P>
<HR>

<P>

<!-- ======== CONSTRUCTOR SUMMARY ======== -->

<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
<B>Constructor Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../../../../../../com/google/template/soy/internal/base/UnicodeEscaper.html#UnicodeEscaper()">UnicodeEscaper</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
</TR>
</TABLE>
&nbsp;
<!-- ========== METHOD SUMMARY =========== -->

<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>protected static&nbsp;int</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../../../com/google/template/soy/internal/base/UnicodeEscaper.html#codePointAt(java.lang.CharSequence, int, int)">codePointAt</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/CharSequence.html?is-external=true" title="class or interface in java.lang">CharSequence</A>&nbsp;seq,
            int&nbsp;index,
            int&nbsp;end)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the Unicode code point of the character at the given index.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Appendable.html?is-external=true" title="class or interface in java.lang">Appendable</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../../../com/google/template/soy/internal/base/UnicodeEscaper.html#escape(java.lang.Appendable)">escape</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Appendable.html?is-external=true" title="class or interface in java.lang">Appendable</A>&nbsp;out)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an <code>Appendable</code> instance which automatically escapes all
 text appended to it before passing the resulting text to an underlying
 <code>Appendable</code>.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>protected abstract &nbsp;char[]</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../../../com/google/template/soy/internal/base/UnicodeEscaper.html#escape(int)">escape</A></B>(int&nbsp;cp)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the escaped form of the given Unicode code point, or <code>null</code>
 if this code point does not need to be escaped.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../../../com/google/template/soy/internal/base/UnicodeEscaper.html#escape(java.lang.String)">escape</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&nbsp;string)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the escaped form of a given literal string.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>protected &nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../../../com/google/template/soy/internal/base/UnicodeEscaper.html#escapeSlow(java.lang.String, int)">escapeSlow</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&nbsp;s,
           int&nbsp;index)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the escaped form of a given literal string, starting at the given
 index.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>protected &nbsp;int</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../../../com/google/template/soy/internal/base/UnicodeEscaper.html#nextEscapeIndex(java.lang.CharSequence, int, int)">nextEscapeIndex</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/CharSequence.html?is-external=true" title="class or interface in java.lang">CharSequence</A>&nbsp;csq,
                int&nbsp;start,
                int&nbsp;end)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Scans a sub-sequence of characters from a given <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/CharSequence.html?is-external=true" title="class or interface in java.lang"><CODE>CharSequence</CODE></A>,
 returning the index of the next character that requires escaping.</TD>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
</TR>
</TABLE>
&nbsp;
<P>

<!-- ========= CONSTRUCTOR DETAIL ======== -->

<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
<B>Constructor Detail</B></FONT></TH>
</TR>
</TABLE>

<A NAME="UnicodeEscaper()"><!-- --></A><H3>
UnicodeEscaper</H3>
<PRE>
public <B>UnicodeEscaper</B>()</PRE>
<DL>
</DL>

<!-- ============ METHOD DETAIL ========== -->

<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>

<A NAME="escape(int)"><!-- --></A><H3>
escape</H3>
<PRE>
protected abstract char[] <B>escape</B>(int&nbsp;cp)</PRE>
<DL>
<DD>Returns the escaped form of the given Unicode code point, or <code>null</code>
 if this code point does not need to be escaped. When called as part of an
 escaping operation, the given code point is guaranteed to be in the range
 <code>0 &lt;= cp &lt;= Character#MAX_CODE_POINT</code>.

 <p>If an empty array is returned, this effectively strips the input
 character from the resulting text.

 <p>If the character does not need to be escaped, this method should return
 <code>null</code>, rather than an array containing the character representation
 of the code point. This enables the escaping algorithm to perform more
 efficiently.

 <p>If the implementation of this method cannot correctly handle a
 particular code point then it should either throw an appropriate runtime
 exception or return a suitable replacement character. It must never
 silently discard invalid input as this may constitute a security risk.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>cp</CODE> - the Unicode code point to escape if necessary
<DT><B>Returns:</B><DD>the replacement characters, or <code>null</code> if no escaping was
     needed</DL>
</DD>
</DL>
<HR>

<A NAME="nextEscapeIndex(java.lang.CharSequence, int, int)"><!-- --></A><H3>
nextEscapeIndex</H3>
<PRE>
protected int <B>nextEscapeIndex</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/CharSequence.html?is-external=true" title="class or interface in java.lang">CharSequence</A>&nbsp;csq,
                              int&nbsp;start,
                              int&nbsp;end)</PRE>
<DL>
<DD>Scans a sub-sequence of characters from a given <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/CharSequence.html?is-external=true" title="class or interface in java.lang"><CODE>CharSequence</CODE></A>,
 returning the index of the next character that requires escaping.

 <p><b>Note:</b> When implementing an escaper, it is a good idea to override
 this method for efficiency. The base class implementation determines
 successive Unicode code points and invokes <A HREF="../../../../../../com/google/template/soy/internal/base/UnicodeEscaper.html#escape(int)"><CODE>escape(int)</CODE></A> for each of
 them. If the semantics of your escaper are such that code points in the
 supplementary range are either all escaped or all unescaped, this method
 can be implemented more efficiently using <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/CharSequence.html?is-external=true#charAt(int)" title="class or interface in java.lang"><CODE>CharSequence.charAt(int)</CODE></A>.

 <p>Note however that if your escaper does not escape characters in the
 supplementary range, you should either continue to validate the correctness
 of any surrogate characters encountered or provide a clear warning to users
 that your escaper does not validate its input.

 <p>See <A HREF="../../../../../../com/google/template/soy/internal/base/PercentEscaper.html" title="class in com.google.template.soy.internal.base"><CODE>PercentEscaper</CODE></A> for an example.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>csq</CODE> - a sequence of characters<DD><CODE>start</CODE> - the index of the first character to be scanned<DD><CODE>end</CODE> - the index immediately after the last character to be scanned
<DT><B>Throws:</B>
<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if the scanned sub-sequence of <code>csq</code>
     contains invalid surrogate pairs</DL>
</DD>
</DL>
<HR>

<A NAME="escape(java.lang.String)"><!-- --></A><H3>
escape</H3>
<PRE>
public <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A> <B>escape</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&nbsp;string)</PRE>
<DL>
<DD>Returns the escaped form of a given literal string.

 <p>If you are escaping input in arbitrary successive chunks, then it is not
 generally safe to use this method. If an input string ends with an
 unmatched high surrogate character, then this method will throw
 <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang"><CODE>IllegalArgumentException</CODE></A>. You should either ensure your input is
 valid <a href="http://en.wikipedia.org/wiki/UTF-16">UTF-16</a> before
 calling this method or use an escaped <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Appendable.html?is-external=true" title="class or interface in java.lang"><CODE>Appendable</CODE></A> (as returned by
 <A HREF="../../../../../../com/google/template/soy/internal/base/UnicodeEscaper.html#escape(java.lang.Appendable)"><CODE>escape(Appendable)</CODE></A>) which can cope with arbitrarily split input.

 <p><b>Note:</b> When implementing an escaper it is a good idea to override
 this method for efficiency by inlining the implementation of
 <A HREF="../../../../../../com/google/template/soy/internal/base/UnicodeEscaper.html#nextEscapeIndex(java.lang.CharSequence, int, int)"><CODE>nextEscapeIndex(CharSequence, int, int)</CODE></A> directly. Doing this for
 <A HREF="../../../../../../com/google/template/soy/internal/base/PercentEscaper.html" title="class in com.google.template.soy.internal.base"><CODE>PercentEscaper</CODE></A> more than doubled the performance for unescaped
 strings.
<P>
<DD><DL>
<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../../../com/google/template/soy/internal/base/Escaper.html#escape(java.lang.String)">escape</A></CODE> in interface <CODE><A HREF="../../../../../../com/google/template/soy/internal/base/Escaper.html" title="interface in com.google.template.soy.internal.base">Escaper</A></CODE></DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>string</CODE> - the literal string to be escaped
<DT><B>Returns:</B><DD>the escaped form of <code>string</code>
<DT><B>Throws:</B>
<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if <code>string</code> is null
<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if invalid surrogate characters are
         encountered</DL>
</DD>
</DL>
<HR>

<A NAME="escapeSlow(java.lang.String, int)"><!-- --></A><H3>
escapeSlow</H3>
<PRE>
protected final <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A> <B>escapeSlow</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&nbsp;s,
                                  int&nbsp;index)</PRE>
<DL>
<DD>Returns the escaped form of a given literal string, starting at the given
 index.  This method is called by the <A HREF="../../../../../../com/google/template/soy/internal/base/UnicodeEscaper.html#escape(java.lang.String)"><CODE>escape(String)</CODE></A> method when it
 discovers that escaping is required.  It is protected to allow subclasses
 to override the fastpath escaping function to inline their escaping test.
 See <A HREF="../../../../../../com/google/template/soy/internal/base/CharEscaperBuilder.html" title="class in com.google.template.soy.internal.base"><CODE>CharEscaperBuilder</CODE></A> for an example usage.

 <p>This method is not reentrant and may only be invoked by the top level
 <A HREF="../../../../../../com/google/template/soy/internal/base/UnicodeEscaper.html#escape(java.lang.String)"><CODE>escape(String)</CODE></A> method.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>s</CODE> - the literal string to be escaped<DD><CODE>index</CODE> - the index to start escaping from
<DT><B>Returns:</B><DD>the escaped form of <code>string</code>
<DT><B>Throws:</B>
<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if <code>string</code> is null
<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if invalid surrogate characters are
         encountered</DL>
</DD>
</DL>
<HR>

<A NAME="escape(java.lang.Appendable)"><!-- --></A><H3>
escape</H3>
<PRE>
public <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Appendable.html?is-external=true" title="class or interface in java.lang">Appendable</A> <B>escape</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Appendable.html?is-external=true" title="class or interface in java.lang">Appendable</A>&nbsp;out)</PRE>
<DL>
<DD>Returns an <code>Appendable</code> instance which automatically escapes all
 text appended to it before passing the resulting text to an underlying
 <code>Appendable</code>.

 <p>Unlike <A HREF="../../../../../../com/google/template/soy/internal/base/UnicodeEscaper.html#escape(java.lang.String)"><CODE>escape(String)</CODE></A> it is permitted to append arbitrarily
 split input to this Appendable, including input that is split over a
 surrogate pair. In this case the pending high surrogate character will not
 be processed until the corresponding low surrogate is appended. This means
 that a trailing high surrogate character at the end of the input cannot be
 detected and will be silently ignored. This is unavoidable since the
 Appendable interface has no <code>close()</code> method, and it is impossible to
 determine when the last characters have been appended.

 <p>The methods of the returned object will propagate any exceptions thrown
 by the underlying <code>Appendable</code>.

 <p>For well formed <a href="http://en.wikipedia.org/wiki/UTF-16">UTF-16</a>
 the escaping behavior is identical to that of <A HREF="../../../../../../com/google/template/soy/internal/base/UnicodeEscaper.html#escape(java.lang.String)"><CODE>escape(String)</CODE></A> and
 the following code is equivalent to (but much slower than)
 <code>escaper.escape(string)</code>: <pre><code>StringBuilder sb = new StringBuilder();
   escaper.escape(sb).append(string);
   return sb.toString();</code></pre>
<P>
<DD><DL>
<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../../../com/google/template/soy/internal/base/Escaper.html#escape(java.lang.Appendable)">escape</A></CODE> in interface <CODE><A HREF="../../../../../../com/google/template/soy/internal/base/Escaper.html" title="interface in com.google.template.soy.internal.base">Escaper</A></CODE></DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>out</CODE> - the underlying <code>Appendable</code> to append escaped output to
<DT><B>Returns:</B><DD>an <code>Appendable</code> which passes text to <code>out</code> after
     escaping it
<DT><B>Throws:</B>
<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if <code>out</code> is null
<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if invalid surrogate characters are
         encountered</DL>
</DD>
</DL>
<HR>

<A NAME="codePointAt(java.lang.CharSequence, int, int)"><!-- --></A><H3>
codePointAt</H3>
<PRE>
protected static final int <B>codePointAt</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/CharSequence.html?is-external=true" title="class or interface in java.lang">CharSequence</A>&nbsp;seq,
                                       int&nbsp;index,
                                       int&nbsp;end)</PRE>
<DL>
<DD>Returns the Unicode code point of the character at the given index.

 <p>Unlike <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Character.html?is-external=true#codePointAt(java.lang.CharSequence, int)" title="class or interface in java.lang"><CODE>Character.codePointAt(CharSequence, int)</CODE></A> or
 <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true#codePointAt(int)" title="class or interface in java.lang"><CODE>String.codePointAt(int)</CODE></A> this method will never fail silently when
 encountering an invalid surrogate pair.

 <p>The behaviour of this method is as follows:
 <ol>
 <li>If <code>index &gt;= end</code>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IndexOutOfBoundsException.html?is-external=true" title="class or interface in java.lang"><CODE>IndexOutOfBoundsException</CODE></A> is thrown.
 <li><b>If the character at the specified index is not a surrogate, it is
     returned.</b>
 <li>If the first character was a high surrogate value, then an attempt is
     made to read the next character.
     <ol>
     <li><b>If the end of the sequence was reached, the negated value of
         the trailing high surrogate is returned.</b>
     <li><b>If the next character was a valid low surrogate, the code point
         value of the high/low surrogate pair is returned.</b>
     <li>If the next character was not a low surrogate value, then
         <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang"><CODE>IllegalArgumentException</CODE></A> is thrown.
     </ol>
 <li>If the first character was a low surrogate value,
     <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang"><CODE>IllegalArgumentException</CODE></A> is thrown.
 </ol>
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>seq</CODE> - the sequence of characters from which to decode the code point<DD><CODE>index</CODE> - the index of the first character to decode<DD><CODE>end</CODE> - the index beyond the last valid character to decode
<DT><B>Returns:</B><DD>the Unicode code point for the given index or the negated value of
         the trailing high surrogate character at the end of the sequence</DL>
</DD>
</DL>
<!-- ========= END OF CLASS DATA ========= -->
<HR>


<!-- ======= START OF BOTTOM NAVBAR ====== -->
<A NAME="navbar_bottom"><!-- --></A>
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
</EM>
</TD>
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="../../../../../../com/google/template/soy/internal/base/UnescapeUtils.html" title="class in com.google.template.soy.internal.base"><B>PREV CLASS</B></A>&nbsp;
&nbsp;NEXT CLASS</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="../../../../../../index.html?com/google/template/soy/internal/base/UnicodeEscaper.html" target="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="UnicodeEscaper.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;<SCRIPT type="text/javascript">
  <!--
  if(window==top) {
    document.writeln('<A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
  <A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>


</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_bottom"></A>
<!-- ======== END OF BOTTOM NAVBAR ======= -->

<HR>

        
          <div id="footer">
            <div id="footerlogo" style="float:left">
              <img src="http://www.google.com/images/art.gif"
                   alt="Google colored balls">
            </div>
            <div id="copyright" style="float:left">
              <p>
                &copy; 2009 Google -
                <a href="http://www.google.com/privacy.html">Privacy Policy</a> -
                <a href="http://www.google.com/terms_of_service.html">Terms and Conditions</a> -
                <a href="http://www.google.com/about.html">About Google</a>
              </p>
            </div>
          </div>
        
      
</BODY>
</HTML>
